package com.bocloud.kong.connector;

import java.util.Map;

import com.bocloud.kong.model.Api;

import okhttp3.ResponseBody;
import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.DELETE;
import retrofit2.http.GET;
import retrofit2.http.PATCH;
import retrofit2.http.POST;
import retrofit2.http.PUT;
import retrofit2.http.Path;
import retrofit2.http.QueryMap;

/**
 * Title: ApiService Description: API HTTP请求定义接口
 *
 * @author lkx
 * @version 1.0.0
 * @since 2017-02-15 17:51
 */
public interface ApiConnector {

	/**
	 * 新增 API
	 *
	 * @param newApi
	 *            新API对象
	 * @return 创建的API信息
	 */
	@POST("/apis")
	Call<Api> add(@Body Api newApi);

	/**
	 * API 管理
	 *
	 * @param queryInfo
	 *            查询
	 * @return API 查询列表
	 */
	@GET("/apis")
	Call<ResponseBody> query(@QueryMap Map<String, Object> queryInfo);

	/**
	 * 查询 API
	 *
	 * @param apiId
	 *            API的ID, Kong 存储管理, 实际为 Cassandra 的UUID
	 * @return 指定ID的API信息
	 */
	@GET("/apis/{apiId}")
	Call<Api> queryOne(@Path("apiId") String apiId);

	/**
	 * API 信息修改 (只有修改, 无法创建)
	 *
	 * @param apiId
	 *            API ID
	 * @param api
	 *            API 信息
	 */
	@PATCH("/apis/{apiId}")
	Call<Api> update(@Path("apiId") String apiId, @Body Api api);

	/**
	 * 修改或者创建 API, 当消息对象的ID不存在时则为创建
	 *
	 * @deprecated 请使用 {@link #update(String, Api)} 和 {@link #add(Api)} 两个方法
	 * @param api
	 *            API 信息
	 */
	@PUT("/apis")
	@Deprecated
	Call<Api> updateOrCreate(@Body Api api); // NOSONAR

	/**
	 * 删除某个API, 返回值为空 (注意)
	 *
	 * @param apiId
	 *            API ID
	 */
	@DELETE("/apis/{apiId}")
	Call<String> delete(@Path("apiId") String apiId);
}
